package com.mydomain.Bodega;

import com.mydomain.Bodega.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.framework.EntityHome;

@Name("invGrupoHome")
public class InvGrupoHome extends EntityHome<InvGrupo> {

	public void setInvGrupoGruCodigo(String id) {
		setId(id);
	}

	public String getInvGrupoGruCodigo() {
		return (String) getId();
	}

	@Override
	protected InvGrupo createInstance() {
		InvGrupo invGrupo = new InvGrupo();
		return invGrupo;
	}

	public void wire() {
		getInstance();
	}

	public boolean isWired() {
		return true;
	}

public void metodoRegistroDeAuditoria(String varOperacion, String  varPantalla,String  codigo,EntityManager em){
		
		try {
			
			Subdepartamento subdepartamento = (Subdepartamento) getSessionContext()
			.get("usuarioLogeo");
			Auditoria auditoria = new Auditoria();
			auditoria.setAudPantalla(varPantalla);
			auditoria.setAudOperacion(varOperacion);
			auditoria.setAudFecha((new Date()));
			auditoria.setAudCodigoDeTabla(codigo);
			auditoria.setUsuario(subdepartamento.getUsuario());
			em.flush();
			em.persist(auditoria);
		} catch (Exception e) {
			// TODO: handle exception
		}

	}

	@Override
	@Transactional
	public String persist() {
		System.out.println(getInstance().getGruCodigo());
		try {
			InvGrupo invGrupo = null;
			invGrupo = getEntityManager().find(InvGrupo.class,
					getInstance().getGruCodigo());
			if (invGrupo == null) {
				getEntityManager().persist(getInstance());
				getEntityManager().flush();
				metodoRegistroDeAuditoria("INSERTATR", "GRUPO",getInstance().getGruCodigo(),getEntityManager());
				getFacesMessages().add("Se agrega un nuevo grupos !!!");
			} else {
				getFacesMessages().add("Ya existe este codigo !!!");
			}
		} catch (Exception e) {
			getFacesMessages().add(e.getMessage());
		}
		return null;
	}

	@Override
	@Transactional
	public String remove() {
		try {
			List validarSiExisteData = getEntityManager().createQuery(
					"SELECT a FROM AuxInvItem a join "
							+ "a.invGrupo g where g.gruCodigo = :codigo")
					.setParameter("codigo", getInstance().getGruCodigo())
					.getResultList();
			if (validarSiExisteData.isEmpty()){
				metodoRegistroDeAuditoria("BORAR", "GRUPO",getInstance().getGruCodigo(),getEntityManager());
				getEntityManager().remove(getInstance());
			getEntityManager().flush();
			}else
				getFacesMessages()
						.add(
						"No se puede borrar por  que tiene asginado items !!! ");

		} catch (Exception e) {
			getFacesMessages().add(e.getMessage());
		}
		return null;
	}
	
	@Override
	@Transactional
	public String update(){
		getEntityManager().merge(getInstance());
		getFacesMessages().add("Se actualizo el grupo !!!");
		metodoRegistroDeAuditoria("ACTUALIZAR","GRUPO",getInstance().getGruCodigo()
				,getEntityManager());
		
		return null;
	}

	public InvGrupo getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}

	public List<AuxInvItem> getAuxInvItems() {
		return getInstance() == null ? null : new ArrayList<AuxInvItem>(
				getInstance().getAuxInvItems());
	}

	public List<InvItemStock> getInvItems() {
		return getInstance() == null ? null : new ArrayList<InvItemStock>(
				getInstance().getInvItemStocks());
	}

}
